{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 1.01 ms\n"
     ]
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "%time from hikyuu.interactive.interactive import *\n",
    "use_draw_engine('matplotlib')\n",
    "#use_draw_engine('echarts')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 一、策略分析\n",
    "\n",
    "## 原始描述\n",
    "\n",
    "建仓条件：expma周线exp1跟exp2金叉向上使用使用 B=50% 的资金买入股票，建仓成功后，卖出条件才能起作用\n",
    "\n",
    "卖出条件S1：expma日线exp1和exp2死叉向下时卖出持仓股 S=50%\n",
    "\n",
    "买入条件B1：expma日线exp1和exp2金叉向上时买入股票数为S（卖出条件S1卖出股数）\n",
    "\n",
    "S1和B1就这样循环\n",
    "\n",
    "清仓条件为：expma周线exp1和exp2死叉时\n",
    "\n",
    "\n",
    "## 策略分析\n",
    "\n",
    "市场环境：无\n",
    "\n",
    "系统有效性：周线EMA1（快线）和EMA2（慢线）金叉向上直到两者死叉，系统有效时建立初始仓位\n",
    "\n",
    "信号指示器：\n",
    "- 买入：日线EMA1（快线）和EMA2（慢线）金叉向上\n",
    "- 卖出：日线EMA1（快线）和EMA2（慢线）死叉向下\n",
    "\n",
    "止损/止盈：无\n",
    "\n",
    "资金管理：\n",
    "- 初次建仓：使用50%的资金\n",
    "- 买入：初次建仓时持股数的50%\n",
    "- 卖出：初次建仓时持股数的50%\n",
    "\n",
    "盈利目标：无\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 二、实现系统部件\n",
    "\n",
    "## 自定义系统有效性策略"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def getNextWeekDateList(week):\n",
    "    from datetime import timedelta\n",
    "    py_week = week.datetime()\n",
    "    next_week_start = py_week + timedelta(days = 7 - py_week.weekday())\n",
    "    next_week_end = next_week_start + timedelta(days=5)\n",
    "    return getDateRange(Datetime(next_week_start), Datetime(next_week_end))\n",
    "#ds = getNextWeekDateList(Datetime(201801010000))\n",
    "#for d in ds:\n",
    "#    print(d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def DEMO_CN(self):\n",
    "    \"\"\" DIF > DEA 时，系统有效\n",
    "    参数：\n",
    "    fast_n：周线dif窗口\n",
    "    slow_n: 周线dea窗口\n",
    "    \"\"\"\n",
    "    k = self.getTO()\n",
    "    if (len(k) <= 1):\n",
    "        return\n",
    "    \n",
    "    #-----------------------------\n",
    "    # 周线        \n",
    "    #-----------------------------\n",
    "    week_q = QueryByDate(k[0].datetime, k[-1].datetime, kType=Query.WEEK)\n",
    "    week_k = k.getStock().getKData(week_q)\n",
    "    \n",
    "    n1 = self.getParam(\"week_macd_n1\")\n",
    "    n2 = self.getParam(\"week_macd_n2\")\n",
    "    n3 = self.getParam(\"week_macd_n3\")\n",
    "    m = MACD(CLOSE(week_k), n1, n2, n3)\n",
    "    fast = m.getResult(0)\n",
    "    slow = m.getResult(1)\n",
    "\n",
    "    x = fast > slow\n",
    "    for i in range(x.discard, len(x)-1):\n",
    "        if (x[i] >= 1.0):\n",
    "            #需要被扩展到日线（必须是后一周）\n",
    "            date_list = getNextWeekDateList(week_k[i].datetime)\n",
    "            for d in date_list:\n",
    "                self._addValid(d)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 自定义信号指示器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "#这个例子不需要，已经有内建的SG_Cross函数可直接使用"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 自定义资金管理策略"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "class DEMO_MM(MoneyManagerBase):\n",
    "    \"\"\"\n",
    "    初次建仓：使用50%的资金\n",
    "    买入：初次建仓时持股数的50%\n",
    "    卖出：初次建仓时持股数的50%\n",
    "    \"\"\"\n",
    "    def __init__(self):\n",
    "        super(DEMO_MM, self).__init__(\"MACD_MM\")\n",
    "        self.setParam(\"init_position\", 0.5) #自定义初始仓位参数，占用资金百分比\n",
    "        self.next_buy_num = 0\n",
    "        \n",
    "    def _reset(self):\n",
    "        self.next_buy_num = 0\n",
    "        #pass\n",
    "        \n",
    "    def _clone(self):\n",
    "        mm = DEMO_MM()\n",
    "        mm.next_buy_num = self.next_buy_num\n",
    "        #return DEMO_MM()\n",
    "    \n",
    "    def _getBuyNumber(self, datetime, stk, price, risk, part_from):\n",
    "        tm = self.getTM()\n",
    "        cash = tm.currentCash\n",
    "        \n",
    "        #如果信号来源于系统有效条件，建立初始仓位\n",
    "        if part_from == System.Part.CONDITION:\n",
    "            #return int((cash * 0.5 // price // stk.atom) * stk.atom)  #MoneyManagerBase其实已经保证了买入是最小交易数的整数\n",
    "            self.next_buy_num = 0 #清理掉上一周期建仓期间滚动买卖的股票数\n",
    "            return int(cash * self.getParam(\"init_position\") // price)\n",
    "        \n",
    "        #非初次建仓，买入同等数量\n",
    "        return self.next_buy_num\n",
    "    \n",
    "    def _getSellNumber(self, datetime, stk, price, risk, part_from):\n",
    "        tm = self.getTM()\n",
    "        position = tm.getPosition(stk)\n",
    "        current_num = int(position.number * 0.5)\n",
    "        \n",
    "        #记录第一次卖出时的股票数，以便下次以同等数量买入\n",
    "        if self.next_buy_num == 0:\n",
    "            self.next_buy_num = current_num \n",
    "            \n",
    "        return current_num #返回类型必须是整数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 三、构建并运行系统\n",
    "\n",
    "## 修改设定公共参数\n",
    "\n",
    "每个系统部件以及TradeManager都有自己的公共参数会影响系统运行，具体可以查看帮助及试验。\n",
    "\n",
    "比如：这个例子当前使用系统有效条件进行初始建仓，那么必须设置系统公共参数cn_open_position为True。否则，没有建立初始仓位的话，后续没有卖出，不会有任何交易。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "#System参数\n",
    "#delay=True #(bool) : 是否延迟到下一个bar开盘时进行交易\n",
    "#delay_use_current_price=True #(bool) : 延迟操作的情况下，是使用当前交易时bar的价格计算新的止损价/止赢价/目标价还是使用上次计算的结果\n",
    "#max_delay_count=3 #(int) : 连续延迟交易请求的限制次数\n",
    "#tp_monotonic=True #(bool) : 止赢单调递增\n",
    "#tp_delay_n=3 #(int) : 止盈延迟开始的天数，即止盈策略判断从实际交易几天后开始生效\n",
    "#ignore_sell_sg=False #(bool) : 忽略卖出信号，只使用止损/止赢等其他方式卖出\n",
    "#ev_open_position=False #(bool): 是否使用市场环境判定进行初始建仓\n",
    "\n",
    "cn_open_position=True #(bool): 是否使用系统有效性条件进行初始建仓\n",
    "\n",
    "#MoneyManager公共参数\n",
    "#auto-checkin=False #(bool) : 当账户现金不足以买入资金管理策略指示的买入数量时，自动向账户中补充存入（checkin）足够的现金。\n",
    "#max-stock=20000 #(int) : 最大持有的证券种类数量（即持有几只股票，而非各个股票的持仓数）\n",
    "#disable_ev_force_clean_position=False #(bool) : 禁用市场环境失效时强制清仓\n",
    "#disable_cn_force_clean_position=False #(bool) : 禁用系统有效条件失效时强制清仓\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 设定私有参数及待测试标的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "#账户参数\n",
    "init_cash = 500000 #账户初始资金\n",
    "init_date = '1990-1-1' #账户建立日期\n",
    "\n",
    "#信号指示器参数\n",
    "week_n1 = 12\n",
    "week_n2 = 26\n",
    "week_n3 = 9\n",
    "\n",
    "#选定标的，及测试区间\n",
    "stk = sm['sz000002']\n",
    "\n",
    "#如果是同一级别K线，可以使用索引号，使用了不同级别的K线数据，建议还是使用日期作为参数\n",
    "#另外，数据量太大的话，matplotlib绘图会比较慢\n",
    "start_date = Datetime('2016-01-01')  \n",
    "end_date = Datetime()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 构建系统实例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "#创建模拟交易账户进行回测，初始资金30万\n",
    "my_tm = crtTM(datetime=Datetime(init_date), initCash = init_cash)\n",
    "\n",
    "#创建系统实例\n",
    "my_sys = SYS_Simple()\n",
    "\n",
    "my_sys.setParam(\"cn_open_position\", cn_open_position)\n",
    "\n",
    "my_sys.tm = my_tm\n",
    "my_sys.cn = crtCN(DEMO_CN, \n",
    "              {'week_macd_n1': week_n1, 'week_macd_n2': week_n2, 'week_macd_n3': week_n3}, \n",
    "                'DEMO_CN')  \n",
    "my_sys.sg = SG_Cross(EMA(n=week_n1), EMA(n=week_n2))\n",
    "my_sys.mm = DEMO_MM()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 运行系统"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "q = QueryByDate(start_date, end_date, kType=Query.DAY)\n",
    "my_sys.run(stk, q)\n",
    "\n",
    "#将交易记录及持仓情况，保存在临时目录，可用Excel查看\n",
    "#临时目录一般设置在数据所在目录下的 tmp 子目录\n",
    "#如果打开了excel记录，再次运行系统前，记得先关闭excel文件，否则新的结果没法保存\n",
    "my_tm.tocsv(sm.tmpdir())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 四、查看资金曲线及绩效统计"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制资金收益曲线\n",
    "x = my_tm.getProfitCurve(stk.getDatetimeList(q), KQuery.DAY)\n",
    "#x = my_tm.getFundsCurve(stk.getDatetimeList(q), KQuery.DAY) #资金净值曲线\n",
    "PRICELIST(x).plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "帐户初始金额: 500000.00\n",
      "累计投入本金: 500000.00\n",
      "累计投入资产: 0.00\n",
      "累计借入现金: 0.00\n",
      "累计借入资产: 0.00\n",
      "累计红利: 0.00\n",
      "现金余额: 722279.50\n",
      "未平仓头寸净值: 0.00\n",
      "当前总资产: 722279.50\n",
      "已平仓交易总成本: 0.00\n",
      "已平仓净利润总额: 222279.50\n",
      "单笔交易最大占用现金比例%: 49.94\n",
      "交易平均占用现金比例%: 43.77\n",
      "已平仓帐户收益率%: 44.46\n",
      "帐户年复合收益率%: 14.67\n",
      "帐户平均年收益率%: 16.54\n",
      "赢利交易赢利总额: 296681.50\n",
      "亏损交易亏损总额: -74402.00\n",
      "已平仓交易总数: 5.00\n",
      "赢利交易数: 4.00\n",
      "亏损交易数: 1.00\n",
      "赢利交易比例%: 80.00\n",
      "赢利期望值: 44455.90\n",
      "赢利交易平均赢利: 74170.38\n",
      "亏损交易平均亏损: -74402.00\n",
      "平均赢利/平均亏损比例: 1.00\n",
      "净赢利/亏损比例: 3.99\n",
      "最大单笔赢利: 130416.00\n",
      "最大单笔亏损: -74402.00\n",
      "赢利交易平均持仓时间: 75.50\n",
      "赢利交易最大持仓时间: 141.00\n",
      "亏损交易平均持仓时间: 119.00\n",
      "亏损交易最大持仓时间: 119.00\n",
      "空仓总时间: 561.00\n",
      "空仓时间/总时间%: 57.00\n",
      "平均空仓时间: 112.00\n",
      "最长空仓时间: 327.00\n",
      "最大连续赢利笔数: 2.00\n",
      "最大连续亏损笔数: 1.00\n",
      "最大连续赢利金额: 192882.00\n",
      "最大连续亏损金额: -74402.00\n",
      "R乘数期望值: 0.15\n",
      "交易机会频率/年: 1.86\n",
      "年度期望R乘数: 0.28\n",
      "赢利交易平均R乘数: 0.22\n",
      "亏损交易平均R乘数: -0.15\n",
      "最大单笔赢利R乘数: 0.52\n",
      "最大单笔亏损R乘数: -0.15\n",
      "最大连续赢利R乘数: 0.33\n",
      "最大连续亏损R乘数: -0.15\n",
      "\n"
     ]
    }
   ],
   "source": [
    "#回测统计\n",
    "per = Performance()\n",
    "print(per.report(my_tm, Datetime.now()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 五、或许想看下图形"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "#自己写吧"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# 六、或许想看看所有股票的情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2019-03-27 21:40:29.664] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:29.806] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:29.867] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:29.868] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:29.949] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:29.965] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:30.112] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:30.215] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:30.517] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:30.777] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:30.852] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:30.910] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:31.147] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:31.307] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:31.712] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:31.832] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:31.972] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:32.112] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:32.174] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:32.370] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:32.387] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:32.810] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:32.900] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:32.955] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:33.184] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:33.344] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:33.910] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:34.318] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:34.382] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:34.460] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:34.923] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:35.093] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:35.194] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:35.327] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:35.481] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:35.566] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:35.774] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:36.124] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:36.278] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:36.576] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:37.053] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:37.131] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:37.818] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:37.879] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.150] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.161] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.202] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.210] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.346] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.389] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.552] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.553] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.731] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.732] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.733] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.781] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:38.908] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:39.406] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:39.430] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:39.463] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:39.600] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:39.894] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:40.046] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:40.063] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:40.113] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:40.173] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:40.256] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:40.258] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:40.329] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:40.653] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:40.940] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:40.982] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:41.114] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:41.171] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:41.276] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:41.323] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:41.437] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:41.465] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:41.555] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:41.842] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:41.964] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:42.085] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:42.226] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:42.282] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:43.369] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:43.370] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:43.424] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:44.174] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:44.244] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:46.515] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:48.114] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:48.827] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:50.505] [info] KData is empty! [System::run]\n",
      "[2019-03-27 21:40:50.762] [info] KData is empty! [System::run]\n",
      "Wall time: 21.3 s\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "def calTotal(blk, q):\n",
    "    per = Performance()\n",
    "    s_name = []\n",
    "    s_code = []\n",
    "    x = []\n",
    "    for stk in blk:\n",
    "        my_sys.run(stk, q)\n",
    "        per.statistics(my_tm, Datetime.now())\n",
    "        s_name.append(stk.name)\n",
    "        s_code.append(stk.market_code)\n",
    "        x.append(per.get(\"当前总资产\".encode('gb2312')))\n",
    "    return pd.DataFrame({'代码': s_code, '股票': s_name, '当前总资产': x})\n",
    "\n",
    "%time data = calTotal(blocka, q)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>代码</th>\n",
       "      <th>股票</th>\n",
       "      <th>当前总资产</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>SZ000532</td>\n",
       "      <td>华金资本</td>\n",
       "      <td>469648.70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>SH601777</td>\n",
       "      <td>力帆股份</td>\n",
       "      <td>411624.04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>SZ300238</td>\n",
       "      <td>冠昊生物</td>\n",
       "      <td>572131.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>SH600781</td>\n",
       "      <td>辅仁药业</td>\n",
       "      <td>495012.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>SH600770</td>\n",
       "      <td>综艺股份</td>\n",
       "      <td>451413.04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>SH600671</td>\n",
       "      <td>天目药业</td>\n",
       "      <td>408328.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>SZ002888</td>\n",
       "      <td>惠威科技</td>\n",
       "      <td>643861.50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>SH600086</td>\n",
       "      <td>东方金钰</td>\n",
       "      <td>440287.42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>SH603599</td>\n",
       "      <td>广信股份</td>\n",
       "      <td>412215.16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>SH600363</td>\n",
       "      <td>联创光电</td>\n",
       "      <td>522211.94</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         代码    股票      当前总资产\n",
       "0  SZ000532  华金资本  469648.70\n",
       "1  SH601777  力帆股份  411624.04\n",
       "2  SZ300238  冠昊生物  572131.00\n",
       "3  SH600781  辅仁药业  495012.25\n",
       "4  SH600770  综艺股份  451413.04\n",
       "5  SH600671  天目药业  408328.75\n",
       "6  SZ002888  惠威科技  643861.50\n",
       "7  SH600086  东方金钰  440287.42\n",
       "8  SH603599  广信股份  412215.16\n",
       "9  SH600363  联创光电  522211.94"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#保存到CSV文件\n",
    "#data.to_csv(sm.tmpdir() + '/统计.csv')\n",
    "data[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
